#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using std::string;


void Daemon(const string& path = "./", const string& logfile = "/dev/null")
{
    //1.忽略其他异常信号
    signal(SIGPIPE,SIG_IGN);

    //2.创建独立对话
    pid_t pid = fork();
    if(pid > 0) exit(0);
    setsid();

    //3.更改工作目录（可选）
    chdir(path.c_str());

    //4.标准输入、输出、错误重定向至文件/dev/null或用于打印日志的文件
    int logfd = open(logfile.c_str(), O_WRONLY);
    if(logfd > 0)       //记得差错处理
    {
        dup2(logfd, 0);
        dup2(logfd, 1);
        dup2(logfd, 2);        
        close(logfd);      //记得关闭
    }

}